// AO GO  和作用域

// 作用域链相关产生的一切问题

// AO -> function 独立的仓库

// 对象
// var obj = {
//     name: "兰轨迹",
//     address: "背景",
//     teach: function() {

//     }
// }

// console.log(obj.name)
// 函数也是一个对象
// function test() {

// }

// 函数也是一种对象类型 引用类型 引用链
// test.name test.length test.prototype
// 对象 -> 有些属性是我们无法访问的js引擎内部固有隐式属性
// [{scope}]

// 1.函数创建时，生成一个js内部的隐式属性
// 2.函数存储作用域链的容器，作用域链
// AO/GO
// AO 函数执行期的上下文
// GO 全局的执行期的上下文
// 函数执行完成以后，AO是要销毁的
// AO是一个即时的存储容器

// scope 是作用域 Scope Chain 作用域链
// 作用域链 会先查自己的AO 然后才会往外层一层一层去查找
// 作用域链就跟数组一样，自顶向下去查找，存储顶部是自己的AO 然后上级的AO然后到GO

// 函数被定义的时候，其作用域链上永远和上级一样，没有执行之前
// 函数被定义的时候，其作用域链上永远和上级执行的一样，没有执行之前
// function a() {
// function b() {

//   }
// }

//预编译
// 1.先找变量声明
// 2.找函数声明

// 函数定义就会生成作用域和作用域链 执行的时候就会生成go